//
//  MFAPMDataFactory.h
//  AFNetworking
//
//  Created by zhang liyu on 2019/5/27.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

/**
 性能监测SDK数据工厂
 */

@class MFAPMNetMonitorModel, MFAPMCrashMonitorModel,MFAPMScreenShotMonitorModel , MFAPMBaseModel;
@interface MFAPMDataFactory : NSObject

#pragma mark - Singleton

+ (instancetype)sharedInstance;

#pragma mark - Parameter Update Actions

/**
 更新USerID字段
 
 @param userID 请求中获取到的用户ID
 */
+ (void)updateUserID:(nullable NSString *)userID;

/**
 返回USerID字段
 */
+ (NSString *)userID;

#pragma mark - Parameter Dictionary Config Actions

/**
 返回数据数据上传接口的请求参数字典
 
 @param dataArr 要上传的统计数据对象
 @return 返回上传请求的参数∫字典
 */
+ (NSDictionary *)configUploadRequestParametersDictFromDataArr:(NSArray<NSDictionary *> *)dataArr;

/**
 返回数据对象的参数字典
 
 @param model 继承自BaseModel的统计数据对象
 @return 返回对应Model子类类型的数据字典
 */
+ (NSDictionary *)configParametersDictFromModel:(MFAPMBaseModel *)model;

/**
 获取网络监听要上传的参数字典，同时也是数据库保存的参数字典
 
 @param netModel 网络监听统计对象
 @return 要进行上传的网络监听请求参数
 */
+ (NSDictionary *)configNetMonitorUploadParametersDictFromNetModel:(MFAPMNetMonitorModel * _Nonnull)netModel;

/**
 获取崩溃监听要上传的参数字典，同时也是数据库保存的参数字典
 
 @param crashModel 崩溃监听统计对象
 @return 要进行上传的崩溃监听请求参数
 */
+ (NSDictionary *)configCrashMonitorUploadParametersDictFromCrashModel:(MFAPMCrashMonitorModel * _Nonnull)crashModel;

/**
 获取截屏监听要上传的参数字典，同时也是数据库保存的参数字典
 
 @param screenShotMonitorModel 截屏监听统计对象
 @return 要进行上传的截屏监听请求参数
 */
+ (NSDictionary *)configScreenShotMonitorUploadParametersDictFromScreenShotMonitorModel:(MFAPMScreenShotMonitorModel * _Nonnull)screenShotMonitorModel;

/**
 获取基本数据类型要上传的参数字典，同时也是数据库保存的参数字典
 
 @param baseModel 基本数据类型统计对象
 @return 要进行上传的基本数据类型请求参数
 */
+ (NSDictionary *)configBaseModelUploadParametersDictFromBaseModel:(MFAPMBaseModel * _Nonnull)baseModel;

@end

NS_ASSUME_NONNULL_END
